﻿/*
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Workshop2
{
    class Handler
    {
        public ViewAll view;
        public Repository _r;

        public Handler(Repository r, ViewAll v)
        {
            view = v;
            _r = r;

        }
        public void doMenu()
        {
            IList<Person> myPersonList = _r.getPersons();
            bool exit = false;

            while (!exit)
            {
                bool noPerson = myPersonList.Count == 0;
                // Laddar upp menyn direkt
                view.Menu();
                int index;
                // Läser av vad personen matar in för val.
                string tempChoice = Console.ReadLine();
                if (!int.TryParse(tempChoice, out index) &&
                    index == 0 || int.Parse(tempChoice) < 0 || int.Parse(tempChoice) > 9)
                {
                    view.RenderMessage("Fel inmatning");
                }
                else
                {
                    int choice = int.Parse(tempChoice);
                    switch (choice)
                    {
                        case 0:
                            exit = true;
                            break;
                        case 1:
                            Console.Clear();
                            // p ropar på addPerson som skapar person och retunerar det
                            Person p = AddPerson();
                            // Om p inte är tom
                            if (p != null)
                            {
                                // Lägger vi p som vi skapa i IList
                                myPersonList.Add(p);
                                List<Person> s = (List<Person>)myPersonList; // Lägger till i listan.

                                s.Sort(); // Sorterar.

                                // Sparar i filen
                                _r.Save(myPersonList);

                            }
                            // Skriver ut
                            view.RenderMessage("Tillagd");
                            ViewAll.ContinueOnKeyPressed();
                            break;

                        case 2:
                            Console.Clear();
                            // Kollar om vi har några personer i listan
                            if (noPerson)
                            {
                                view.RenderMessage("Finns inga personer att hanteras med");
                            }
                            // Annars visar vi listan med personer
                            else { view.Render(myPersonList); }
                            // Tryck för att fortsätta
                            ViewAll.ContinueOnKeyPressed();
                            break;

                        case 3:
                            Console.Clear();
                            // Kollar om vi har några personer i listan
                            if (noPerson)
                            {
                                view.RenderMessage("Finns inga personer att hanteras med");
                            }
                            // Annars visar vi listan med personer
                            else { view.RenderSpecific(myPersonList); }
                            // Tryck för att fortsätta
                            ViewAll.ContinueOnKeyPressed();
                            break;

                        case 4:
                            Console.Clear();
                            // Kollar om vi har några personer i listan
                            if (noPerson)
                            {
                                view.RenderMessage("Finns inga personer att hanteras med");

                            }
                            // Om vi har de visar vi alla medlemmar som man kan ta bort
                            // Och väljer utav dom som ska bort
                            else
                            {
                                view.RenderMessage("Ta Bort Medlem");
                                ViewAll.RenderSelect(myPersonList);
                                myPersonList = DeletePerson(myPersonList);
                                _r.Save(myPersonList);
                                view.RenderMessage("Borttagen");
                                ViewAll.ContinueOnKeyPressed();
                            }
                            break;

                        case 5:
                            Console.Clear();
                            // Kollar om vi har några personer i listan
                            if (noPerson)
                            {
                                view.RenderMessage("Finns inga personer att hanteras med");
                            }
                            // Annars visar vi vilka personer man kan välja
                            else
                            {
                                view.RenderMessage("Ändra Medlem");
                                ViewAll.RenderSelect(myPersonList);
                                myPersonList = ChangePerson(myPersonList);
                                // Sparar händelse i fil
                                _r.Save(myPersonList);
                            }

                            view.RenderMessage("Ändrad");
                            ViewAll.ContinueOnKeyPressed();
                            break;
                        case 6:
                            Console.Clear();
                            // Kollar om vi har några personer i listan
                            if (noPerson)
                            {
                                view.RenderMessage("Finns inga personer att hanteras med");
                            }
                            // Om vi har det så får man välja specifik medlem man vill se info på
                            else
                            {
                                view.RenderMessage("Välj specifik Medlem");
                                ViewAll.RenderSelect(myPersonList);
                                myPersonList = SpecificMember(myPersonList);
                                _r.Save(myPersonList);
                                ViewAll.ContinueOnKeyPressed();
                            }

                            break;
                        case 7:
                            Console.Clear();
                            // Kollar om vi har några personer i listan
                            if (noPerson)
                            {
                                view.RenderMessage("Finns inga personer att hanteras med");
                            }
                            // Om de finns personer så visar vi personer som de ska välja att ändra båt på
                            // Sedan spara händelse. 
                            else
                            {
                                // vad som ska visas
                                view.RenderMessage("Lägg Till Båt");
                                ViewAll.RenderSelect(myPersonList);

                                myPersonList = AddBoat(myPersonList);
                                // Ropar på Addboat och skickar med våra personer
                                // För att lägga till båt/båtar på en viss person
                                _r.Save(myPersonList);
                                view.RenderMessage("Tillagd");
                                ViewAll.ContinueOnKeyPressed();
                            }

                            break;
                        case 8:
                            Console.Clear();
                            if (noPerson)
                            {
                                view.RenderMessage("Finns inga personer att hanteras med");
                            }
                            else
                            {
                                view.RenderMessage("Ta Bort Båt");
                                ViewAll.RenderSelect(myPersonList); // Visar personer i en lista
                                // Ropar på DeleteBoat och skickar med våra personer
                                // För att ta bort båt för en viss person
                                myPersonList = DeleteBoat(myPersonList);

                                if (myPersonList == null)
                                {
                                    view.RenderMessage("Fel inmatning");
                                }
                                else
                                {
                                    _r.Save(myPersonList);
                                    view.RenderMessage("Borttagen");
                                }
                                ViewAll.ContinueOnKeyPressed();
                            }

                            break;
                        case 9:
                            Console.Clear();
                            // Kollar om vi personer i listan
                            if (noPerson)
                            {
                                view.RenderMessage("Finns inga personer att hanteras med");
                            }
                            // Om vi har det så visar vi personer man kan ändra båt på
                            // och sparar händelse
                            else
                            {
                                view.RenderMessage("Ändra Båt");
                                myPersonList = ChangeBoat(myPersonList);
                                if (myPersonList == null)
                                {
                                    view.RenderMessage("Fel inmatning");
                                }
                                else
                                {
                                    _r.Save(myPersonList);
                                    view.RenderMessage("Ändrad");
                                    ViewAll.ContinueOnKeyPressed();
                                }
                            }
                            break;


                    }

                }
            }
        }

        // AddPerson skapar ett person-objekt och retuneras
        public Person AddPerson()
        {

            Console.WriteLine("Ange namn: ");
            string name = Console.ReadLine();
            Console.WriteLine("Ange Personnr: ");
            string ssn = Console.ReadLine();
            Person._id++;
            Person p = new Person(name, ssn);
            return p;
        }
        // DeletePerson listar fram alla medlemmar i en fin lista
        // Man väljer vilken person i listan som ska bort sedan så sparas det i filen
        public IList<Person> DeletePerson(IList<Person> person)
        {

            // Metoden körs ända tills den kmr till break
            while (true)
            {
               
                    string tempNumber = "1";



                    Console.WriteLine("\nTa bort medlem");
                    Console.Write("Ange nummer i listan [1-{0}]:  ", person.Count);

                    tempNumber = Console.ReadLine();

                    // Gjorde en metod som kollar om det är ett nummer och inte för stort eller för litet tal
                    if (IsNumberAndPersonLimit(tempNumber, person))
                    {
                        int number = int.Parse(tempNumber) - 1;
                        // Tar bort den personen man har valt -1 då arrayer börjar alltid på 0
                        person.Remove(person[number]);

                        // Sparar sedan borttagningen på fil.

                        // Skriver ut meddelande
                        return person;

                    }
                    else
                    {
                        // Felmeddelande som finns i klassen ViewAll
                        // La in i metod då den upprepas flera ggr
                        view.RenderMessage("Fel inmatning");
                    }


            }
        }
        //ChangePerson är som DeletePerson
        // Bara de att man får ändra och lägga nya uppgifter i PersonList
        public IList<Person> ChangePerson(IList<Person> person)
        {
            // Om antalet personer är 0 så slängs ett felmeddelande
            while (true)
            {

                try
                {
                    string tempNumber = "1";
                    // Om det bara finns en person så autoväljer den den personen

                        // Repository r = new Repository();
                        Console.ForegroundColor = ConsoleColor.White;
                        Console.ResetColor();
                        Console.WriteLine();
                        Console.Write("Ange nummer [1-{0}]:  ", person.Count);

                        tempNumber = Console.ReadLine();
                    

                    // Gjorde en metod som kollar om det är ett nummer och inte för stort eller för litet tal
                    if (IsNumberAndPersonLimit(tempNumber, person))
                    {
                        int number = int.Parse(tempNumber) - 1;
                        Console.WriteLine("Ange namn");
                        string name = Console.ReadLine();
                        Console.WriteLine("Ange personnr");
                        string ssn = Console.ReadLine();
                        person[number].setName(name);
                        person[number].setSSN(ssn);
                        
                        return person;
                    }
                    else
                    {
                        // Felmeddelande som finns i klassen ViewAll
                        // La in i metod då den upprepas flera ggr
                        view.RenderMessage("Fel inmatning");
                    }
                }
                catch
                {
                    throw new ArgumentException("Nu vart det nå galet fel.");
                }

            }
        }

        // SpecificMember gör att man väljer vilken person man ska använda
        // För att sedan använda ToString() för att se information på användaren
        public IList<Person> SpecificMember(IList<Person> person)
        {
            // Allt körs inom denna while-loop tills det kmr till break
            while (true)
            {
                try
                {
                    string tempNumber = "1";


                        
                        Console.Write("\nAnge nummer [1-{0}]:  ", person.Count);

                        tempNumber = Console.ReadLine();
                        Console.Clear();
                    // Gjorde en metod som kollar om det är ett nummer och inte för stort eller för litet tal
                    if (IsNumberAndPersonLimit(tempNumber, person))
                    {
                        int number = int.Parse(tempNumber) - 1;
                        view.RenderPerson(person[number]);
                        return person;
                    }
                    else
                    {
                        // Felmeddelande som finns i klassen ViewAll
                        // La in i metod då den upprepas flera ggr
                        view.RenderMessage("Fel inmatning");
                    }

                }
                catch
                {
                    throw new ArgumentException("Nu vart det nå galet fel.");
                }



            }
        }
        // AddBoat Lägger till båt i ett personobjekt. 
        // Alltså man måste skapa en person först innan man kan skapa en båt
        public IList<Person> AddBoat(IList<Person> person)
        {
            // Denna metod körs tills den kmr till break
            while (true )
            {
                try
                {
                    double trydouble;
                    string tempNumberOfPerson = "1"; // numberPerson blir automatiskt 1.

                    // Om antalet personer är mer än 1 så måste man välja person själv.

                    Console.Write("Ange nummer [1-{0}]:  ", person.Count);

                    // Väljer person
                    tempNumberOfPerson = Console.ReadLine();

                    // Kollar så att det är ett nummer och inom räckvid
                    if (IsNumberAndPersonLimit(tempNumberOfPerson, person))
                    {
                        int NumberOfPerson = int.Parse(tempNumberOfPerson) - 1;
                        // Ange hur många båtar man vill lägga till
                        Console.WriteLine("Ange hur många båtar du vill lägga till: ");
                        string numberBoats = Console.ReadLine();

                        // Kollar så att inmatningen är ett nr och inte 0 eller mindre
                        if (IsNumberAndInLimit(numberBoats, 50))
                        {
                            person[NumberOfPerson].setNumberOf(int.Parse(numberBoats));
                            Boat[] boat = new Boat[int.Parse(numberBoats)];
                            string tempNum;
                            for (int i = 0; i < int.Parse(numberBoats); i++)
                            {
                                // Lägger in Typ och längd på båten
                                Console.WriteLine("Vad är det för typ av båt?");
                                view.BoatTypes();
                                string Type = null;
                                tempNum = Console.ReadLine();

                                // Kollar så tempNum är ett nr och är inom 1-5
                                if (IsNumberAndInLimit(tempNum, 5))
                                {
                                    // Sen sätter vi num är tempNum
                                    int num = int.Parse(tempNum);

                                    // Sedan sätter vi Type beroende på vad num är
                                    switch (num)
                                    {
                                        case 1:
                                            Type = "Segelbåt";
                                            break;
                                        case 2:
                                            Type = "Motorseglare";
                                            break;
                                        case 3:
                                            Type = "Motorbåt";
                                            break;
                                        case 4:
                                            Type = "Kajak/Kanot";
                                            break;
                                        case 5:
                                            Type = "Övrigt";
                                            break;

                                        default:
                                            Type = "Övrigt";
                                            break;
                                    }

                                    // Sätter längden på båten
                                    Console.WriteLine("Vad är längden?(meter): ");
                                    string Length = Console.ReadLine();

                                    // Kollar så att längden är ett nr
                                    if (!double.TryParse(Length, out trydouble) && double.Parse(Length) <= 0)
                                    {
                                        view.RenderMessage("Fel inmatning");
                                    }
                                    else
                                    {

                                        boat[i] = new Boat(Type, double.Parse(Length));
                                        person[NumberOfPerson].setNumberOf(person[NumberOfPerson].getAntal() + 1);
                                        person[NumberOfPerson].setBoat(boat[i]);

                                        // Sätter antalet båtar på personen
                                        person[NumberOfPerson].setNumberOf(boat.Length);
                                        // Sparar båten
                                        return person;
                                    }
                                }
                                else
                                {
                                    view.RenderMessage("Fel inmatning");
                                }

                            }
                        }
                        else
                        {
                            view.RenderMessage("Fel inmatning");
                        }


                    }
                    else
                    {
                        view.RenderMessage("Fel inmatning");
                    }
                }
                catch
                {
                    throw new ArgumentException("Nu vart de nå knasigt när vi försökte skapa båtar");
                }

            }


        }
        public IList<Person> DeleteBoat(IList<Person> person)
        {
            // så länge det är true
            while (true)
            {
                // så ska metoden förska med
                try
                {

                    string tempNumberOfPerson = "1";
                    string tempNumberOfBoat = "1";
                    Console.Write("\n0. Menu");
                    Console.Write("\nAnge nummer [0-{0}]:  ", person.Count);


                    tempNumberOfPerson = Console.ReadLine(); // Läser in vad man matar in
                    if (int.Parse(tempNumberOfPerson) == 0) // Så om man väljer 0 så går man tillbaka till menyn
                    {
                        return null;
                    }
                    // Om nummret stämmer och inte är mindre än 0 och större än antalet personer
                    if (IsNumberAndPersonLimit(tempNumberOfPerson, person))
                    {
                        // Så gör vi att NumberOfPerson är tempNumberOfPerson -1
                        int NumberOfPerson = int.Parse(tempNumberOfPerson) - 1;

                        // Skapar en ny list med båtobjekt, av den personen vi valde
                        List<Boat> boats = person[NumberOfPerson].getBoat();

                        // Om personen har mer än 0 båtar att hateras med
                        if (boats.Count > 0)
                        {
                            // Så får vi välja vilken båt som ska tas bort
                            Console.Write("Välj båten som ska tas bort");
                            view.RenderBoat(person[NumberOfPerson]);
                            Console.Write("\nAnge nummer [1-{0}]:  ", boats.Count);


                            tempNumberOfBoat = Console.ReadLine();
                            // Kollar så valet är ett tal och att det är högre än 0 och lika eller mindre än antalet båtar
                            if (IsNumberAndBoatLimit(tempNumberOfBoat, boats))
                            {
                                // Skapar ny variabel som blir samma som man mata in fast -1
                                int NumberOfBoat = int.Parse(tempNumberOfBoat) - 1;
                                // Tar bort den båten i listan. 
                                boats.Remove(boats[NumberOfBoat]);

                                // Bekräftar händelse
                                Console.WriteLine();

                                // Sparar händelse
                                return person;
                            }
                            // Detta skrivs ut om valet man skrev om båtar
                            // Är felaktigt
                            else
                            {
                                view.RenderMessage("Fel inmatning");

                            }
                        }
                        // Detta skrivs ut om det inte finns några båtar att välja mellan
                        else
                        {
                            view.RenderMessage("Finns inga båtar att hanteras med, välj någon annan person");

                        }
                    }
                    // Detta skrivs om val av personer är felaktigt
                    else
                    {
                        view.RenderMessage("Fel inmatning");
                    }
                }
                catch
                {
                    throw new ArgumentException("Nu blev de nå fel här");
                }
            }

        }

        // Byter info på båt
        public IList<Person> ChangeBoat(IList<Person> person)
        {

            // så länge det är true
            while (true)
            {
                // så ska metoden förska med
                try
                {
                    string Type;
                    string Length;
                    double tryDouble;
                    string tempNum;
                    string tempNumberOfPerson = "1";
                    string tempNumberOfBoat = "1";

                    ViewAll.RenderSelect(person);
                    Console.Write("\n0. Menu");

                    Console.Write("\nAnge nummer [0-{0}]:  ", person.Count);

                    tempNumberOfPerson = Console.ReadLine(); // Läser in vad man matar in
                    if (IsNumberAndPersonLimit(tempNumberOfPerson, person))
                    {
                        if (int.Parse(tempNumberOfPerson) == 0) // Så om man väljer 0 så går man tillbaka till menyn
                        {

                        }
                        // Om nummret stämmer och inte är mindre än 0 och större än antalet personer
                        if (IsNumberAndPersonLimit(tempNumberOfPerson, person))
                        {
                            // Så gör vi att NumberOfPerson är tempNumberOfPerson -1
                            int NumberOfPerson = int.Parse(tempNumberOfPerson) - 1;



                            // Skapar en ny list med båtobjekt, av den personen vi valde
                            List<Boat> boats = person[NumberOfPerson].getBoat();

                            // Om personen har mer än 0 båtar att hateras med
                            if (boats.Count > 0)
                            {
                                Console.Clear();
                                // Så får vi välja vilken båt som ska tas bort
                                Console.Write("Välj båten som ska ändras");
                                Console.Write("\n--------------------------\n");
                                view.RenderBoat(person[NumberOfPerson]);
                                Console.Write("\nAnge nummer [1-{0}]:  ", boats.Count);

                                
                                tempNumberOfBoat = Console.ReadLine();
                                // Kollar så valet är ett tal och att det är högre än 0 och lika eller mindre än antalet båtar
                                if (IsNumberAndBoatLimit(tempNumberOfBoat, boats))
                                {
                                    Console.Clear();
                                    // Skapar ny variabel som blir samma som man mata in fast -1
                                    int NumberOfBoat = int.Parse(tempNumberOfBoat) - 1;
                                    // Tar bort den båten i listan. 
                                    Console.WriteLine("Vad är det för typ av båt?");
                                    view.BoatTypes();
                                    Console.WriteLine();
                                    Console.Write("Ange Typ [1-5]: ");


                                    tempNum = Console.ReadLine();

                                    // Kollar så tempNum är ett nr och är inom 1-5
                                    if (IsNumberAndInLimit(tempNum, 5))
                                    {
                                        // Sen sätter vi num är tempNum
                                        int num = int.Parse(tempNum);

                                        // Sedan sätter vi Type beroende på vad num är
                                        switch (num)
                                        {
                                            case 1:
                                                Type = "Segelbåt";
                                                break;
                                            case 2:
                                                Type = "Motorseglare";
                                                break;
                                            case 3:
                                                Type = "Motorbåt";
                                                break;
                                            case 4:
                                                Type = "Kajak/Kanot";
                                                break;
                                            case 5:
                                                Type = "Övrigt";
                                                break;

                                            default:
                                                Type = "Övrigt";
                                                break;
                                        }

                                        boats[NumberOfBoat].setType(Type);
                                        Console.WriteLine();
                                        Console.Write("Ange BåtLängd(meter): ");
                                        Length = Console.ReadLine();
                                        if (!double.TryParse(Length, out tryDouble) && double.Parse(Length) <= 0)
                                        {
                                            view.RenderMessage("Fel inmatning");
                                        }
                                        else
                                        {
                                            boats[NumberOfBoat].setLength(double.Parse(Length));
                                        }
                                        // Bekräftar händelse
                                        Console.WriteLine();

                                        // Sparar händelse
                                        return person;
                                    }
                                    else
                                    {
                                        view.RenderMessage("Fel inmatning");
                                    }
                                }
                                // Detta skrivs ut om valet man skrev om båtar
                                // Är felaktigt
                                else
                                {
                                    view.RenderMessage("Fel inmatning");

                                }
                            }
                            // Detta skrivs ut om det inte finns några båtar att välja mellan
                            else
                            {
                                view.RenderMessage("Finns inga båtar att hanteras med, välj någon annan person");
                            }
                        }
                        // Detta skrivs om val av personer är felaktigt
                        else
                        {
                            view.RenderMessage("Fel inmatning");
                        }
                    }
                    else
                    {
                        view.RenderMessage("Fel inmatning");
                        
                    }
                }
                catch
                {
                    throw new ArgumentException("Nu blev de nå fel här");
                }
            }
        }

        // Kollar så de man skickar in är ett nummer och inte mindre än noll och större än antalet personer.
        // Retunerar true om allt stämmer, annars false
        public static bool IsNumberAndPersonLimit(string number, IList<Person> person)
        {
            int index;
            if (!int.TryParse(number, out index) &&
                index == 0 || int.Parse(number) > person.Count ||
                (int.Parse(number) <= 0))
            {
                return false;
            }
            return true;

        }
        public static bool IsNumberAndBoatLimit(string number, List<Boat> boat)
        {
            int index;
            if (!int.TryParse(number, out index) &&
                index == 0 || int.Parse(number) > boat.Count ||
                (int.Parse(number) <= 0))
            {
                return false;
            }
            return true;

        }
        public static bool IsNumberAndInLimit(string number, int count)
        {
            int index;
            if (!int.TryParse(number, out index) &&
                index == 0 || int.Parse(number) > count ||
                (int.Parse(number) <= 0))
            {
                return false;
            }
            return true;
        }
    }
}
*/